package cn.xeblog.plugin.factory;

import cn.hutool.core.thread.GlobalThreadPool;
import cn.xeblog.commons.util.ThreadUtils;
import cn.xeblog.plugin.action.InputAction;
import cn.xeblog.plugin.cache.DataCache;
import cn.xeblog.plugin.ui.MainWindow;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowFactory;
import com.intellij.ui.AncestorListenerAdapter;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentFactory;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;
import javax.swing.event.AncestorEvent;

/**
 * 主窗口工厂
 *
 * @author anlingyi
 * @date 2020/5/26
 */
public class MainWindowFactory implements ToolWindowFactory {

  @Override
  public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
    // 此处方法将会在点击ToolWindow的时候触发，初始化tool Window的UI，并添加到idea中。ToolWindowFactory提供了懒加载机制，这样实现的好处是未使用的工具窗口不会增加启动时间或导致内存使用方面的任何开销：如果用户没有与该工具窗口交互，相关代码就不会被加载和执行

    // 设置项目
    DataCache.project = project;

    // 主窗口
    JPanel mainPanel = MainWindow.getInstance().getMainPanel();

    // 添加监听
    mainPanel.addAncestorListener(new AncestorListenerAdapter() {
      @Override
      public void ancestorAdded(AncestorEvent event) {
        GlobalThreadPool.execute(() -> {
          ThreadUtils.spinMoment(800);
          // 休息光标，作用是重新打开时，光标在输入区域最后位置
          InputAction.restCursor();
        });
      }
    });

    // 内容管理器获取工厂类
    ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
    // 创建Content（组件类实例、显示名称、是否可以锁定）
    Content content = contentFactory.createContent(mainPanel, "", false);
    // 利用ContentManager添加窗口
    toolWindow.getContentManager().addContent(content);
  }

}
